﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using projet_fichier_objet;
using System.Web.UI.MobileControls;
using System.Web.Configuration;


namespace Outils
{
    static public class Utils
    {

        public static string CnxInterimaire = WebConfigurationManager.ConnectionStrings["CnxInterimaire"].ConnectionString;
        
        public enum TypePage
        {
            edition = 1,
            ajout = 2,
            contact = 3,
            suppression = 4
        }


        /// <summary>
        /// Génère un tableau de string avec
        /// des noms aléatoire et non cohérents
        /// Les caractères sont aléatoires...
        /// </summary>
        static public void GenereTab(int nombreElements, string[] untableau)
        {
            string Lettre = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string NomAleatoire = string.Empty;
            Random objetrandom = new Random();
            int NbAleatoire = objetrandom.Next(0, 25); //génere un nombre aléatoire

            if (nombreElements > untableau.Length)
            {
                nombreElements = untableau.Length;
            }
            for (int j = 0; j < nombreElements; j++)
            {
                NomAleatoire = string.Empty;
                for (int i = 0; i < NbAleatoire + 1; i++)
                {
                    NbAleatoire = objetrandom.Next(0, 25);
                    NomAleatoire += Lettre[NbAleatoire];
                }
                untableau[j] = NomAleatoire;
            }
            AfficherTab(untableau);
        }

        /// <summary>
        /// Parcours le tableau (TabInterimaire) et affiche tout ses éléments
        /// </summary>
        static public void AfficherTab(string[] Untableau)
        {
            for (int i = 0; i < Untableau.Length; i++)
            {
                if (Untableau[i] != null)
                {
                    Console.WriteLine("|" + i + "|  " + Untableau[i]);
                }
            }
        }

        /// <summary>
        /// récupère/retourne le première indice n'ayant pas de valeur ou vide 
        /// depuis un tableau
        /// </summary>
        /// <returns>int IndiceLibre</returns>
        static public int GetIndiceLibre(Personne[] Untableau)
        {
            int IndiceLibre = -1;

            for (int i = 0; i < Untableau.Length /*&& IndiceLibre == -1*/ ; i++)
            {
                if (Untableau[i] == null)
                {
                    IndiceLibre = i+2;
                    i = Untableau.Length + 1;  //indice impossible
                }
            }
            return IndiceLibre;
        }


        /// <summary>
        /// Fonction qui retourne les N premiers caractères
        /// d'un mot.
        /// </summary>
        /// <returns>string </returns>
        static public string NpremierCaractere(string Saisie, int Nbcaractere)
        {
            string PremierCaractere = string.Empty;

            if (Nbcaractere < Saisie.Length) //condition essentielle
            {
                for (int i = 0; i < Nbcaractere; i++)
                {
                    PremierCaractere += Saisie[i].ToString();  /*Concaténation de PremierCaractere +
                                                            *conversion du carcatère en cours*/
                }
            }
            return PremierCaractere;
        }

        /// <summary>
        /// Fonction qui contrôle la saisie de l'utilisateur
        /// et qui exclut " 0123456789" 
        /// </summary>
        /// <param name="LaSaisie">Sasie del'utilisateur, Un interimaire, un client...</param>
        /// <returns>si saisie Ok retourne true sinon false</returns>
        static public bool CheckSaisi(string LaSaisie)
        {
            bool Erreur = true;
            string Chiffre = " 0123456789";
            if (LaSaisie != null && LaSaisie != "")
            //string.IsNullOrEmpty;
            {
                for (int i = 0; i < LaSaisie.Length; i++)
                {
                    for (int j = 0; j < Chiffre.Length; j++)
                    {
                        if (LaSaisie[i] == Chiffre[j])
                        {
                            Console.WriteLine("votre saisie n'est pas correcte.");
                            Console.ReadLine();
                            i = LaSaisie.Length + 1;
                            j = Chiffre.Length;
                            Erreur = true;
                        }
                        else
                        {
                            Erreur = false;
                        }
                    }
                }
            }
            else
            {
                Console.WriteLine("Erreur saisie vide.");
                Console.ReadLine();
            }
            return Erreur;
        }

        /// <summary>
        /// Fonctione qui retourne les N dernier
        /// caractère d'une saisie, le nombre de caractère
        /// est défini par le développeur
        /// </summary>
        /// <returns>string</returns>
        static public string NdernierChar(string Saisie, int NbChar)
        {
            string LastCaractere = string.Empty;
            int Taille = Saisie.Length - NbChar;
            if (NbChar < Saisie.Length) //conditon pour aucune erreurs sur indexOutRange
            {
                for (int i = Taille; i < Saisie.Length; i++)
                {
                    LastCaractere += Saisie[i].ToString(); /*Concaténation de lastcaractère +
                                                            *conversion du carcatère en cours*/
                }
            }
            return LastCaractere;
        }

        /// <summary>
        /// Fonction qui parcours un tableau et compare
        /// les premier caractere d'un element avec les premier 
        /// caractère des élément d'un tableau
        /// si il n'y a pas de correspondance, la fonction
        /// retourne un tableau vide (== 0)
        /// sinon elle retourne un tableau d'entiers
        /// </summary>
        /// <returns>un tableau d'entiers (int[]) indice des élément éxistant du tableau</returns>
        static public int[] SearchPartFirstChar(string[] Untableau, string ValeurRecherche)
        {
            int[] IndiceElementMax = new int[Untableau.Length];
            int j = 0;
            for (int i = 0; i < Untableau.Length; i++)
            {
                if (Untableau[i] != null)
                {
                    string NpremierChar = NpremierCaractere(ValeurRecherche, ValeurRecherche.Length - 1);
                    string NpremierCharElemnttab = NpremierCaractere(Untableau[i], ValeurRecherche.Length - 1);

                    if (NpremierChar == NpremierCharElemnttab)
                    {
                        IndiceElementMax[j] = i; //affectation de l'indice de correspondance
                        j++;
                    }
                }
            }
            if (j == 0)  //si aucune correspondance
            {
                int[] tabvide = new int[0];
                return tabvide;
            }
            else if (j == IndiceElementMax.Length) //tout les elements correspondent
                return IndiceElementMax;
            else
            {
                int[] indiceElmt = new int[j];
                for (int i = 0; i < j; i++)
                {
                    indiceElmt[i] = IndiceElementMax[i]; //taille réel du tableau d'indice
                }
                return indiceElmt;
            }
        }

        /// <summary>
        /// Fonction qui parcours un tableau et
        /// compare les dernier caractere de la saisie 
        /// aux dernier caractere d'un tableau si il
        /// n'y pas de correspondance la fonction retourne 
        /// un tableau vide
        /// </summary>
        /// <returns>int[] indice correspondance</returns>
        static public int[] SearchPartLastChar(string[] UnTableau, string Saisie)
        {
            int[] IndiceCorrespondanceMax = new int[UnTableau.Length];
            int j = 0;

            for (int i = 0; i < UnTableau.Length; i++)
            {
                if (UnTableau[i] != null)
                {
                    string ElmtTab = NdernierChar(UnTableau[i], Saisie.Length);

                    if (ElmtTab == Saisie)
                    {
                        IndiceCorrespondanceMax[j] = i; //affectation de l'indice de correspondance
                        j++;
                    }
                }
            }
            if (j == 0) //si aucune correspondance
            {
                int[] TabVide = new int[0];
                return TabVide;
            }
            else if (j == IndiceCorrespondanceMax.Length) //tout les elements correspondent
            {
                return IndiceCorrespondanceMax;
            }
            else
            {
                int[] IndiceCorrespondanceReel = new int[j];
                for (int i = 0; i < j; i++)
                {
                    IndiceCorrespondanceReel[i] = IndiceCorrespondanceMax[i]; //taille réel du tableau d'indice
                }
                return IndiceCorrespondanceReel;
            }
        }

        /// <summary>
        /// Fonction qui parcour la saisie d'un utilisateur
        /// et vérifie si il s'agit d'un entier ou non
        /// retourne un booléen true si erreur et false si 
        /// il s'agit d'un entier
        /// </summary>
        /// <returns>bool erreur</returns>
        static public bool CheckSaisieNombre(string Saisie)
        {
            int a = 0;
            bool Erreur = false;
            if(int.TryParse(Saisie, out a))
            {
                Erreur = false;
            }
            else
            {
                Console.WriteLine("erreur entrer un nombre");
                Erreur = true;
            }
            return Erreur;
        }
        /// <summary>
        /// retourne la première lettre de la string en majuscule
        /// </summary>
        /// <returns></returns>
        static public string FirstLetterUpper(string saisie)
        {
            char[] lettre = saisie.ToCharArray();
            lettre[0] = char.ToUpper(lettre[0]);

            return new string(lettre);
        }


    }
}
